package com.hmall.user.interceptor;

import com.hmall.common.context.BaseContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
@Slf4j
public class JwtTokenUserInterceptor implements HandlerInterceptor {

    /**
     * 校验JWT令牌
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) {
        try {
            //判断当前拦截到的是Controller的方法还是其他的资源
            if (!(handler instanceof HandlerMethod)){
                //当前拦截到的不是动态方法，直接放行
                return true;
            }

            //获取请求头的令牌数据
            String token = request.getHeader("authorization");
            System.out.println(token);


            //将用户id存储到ThreadLocal
            BaseContext.setCurrentId(Long.valueOf(token));

            //如果有登录数据，代表已经登录，放行
            return true;
        } catch (Exception e) {
            //否则，发送未认证错误信息
            response.setStatus(401);
            return false;
        }

    }


}
